#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QMessageBox>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    QNetworkAccessManager *manager = new QNetworkAccessManager(this);

    // 处理服务器端的响应（任意类型的请求，都能在该信号和槽中进行处理）
    connect(manager, &QNetworkAccessManager::finished, [this](QNetworkReply *reply){
        QByteArray jsonStr = reply->readAll();
        QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonStr);
        QJsonObject jsonObj = jsonDoc.object();
        if(jsonObj.value("code").toInt() == 200)
        {
            qDebug() << jsonObj.value("msg").toString();
        }
        else
        {
            QMessageBox::critical(this, "错误", jsonObj.value("msg").toString());
        }
    });

    // get方式
    connect(ui->loginBtnGet, &QPushButton::clicked, [=](){
        // 1. 获取用户填写的账号和密码
        QString account = ui->accLineGet->text();
        QString passwd = ui->pwdLineGet->text();

        // 2. 使用get方式发送请求，并将账号和密码一起发送给服务器端
        // get方式发送数据的格式 key=value&key=value&...
        QString url = QString("http://192.168.124.54:8088/getlogin?username=%1&password=%2").arg(account).arg(passwd);
        manager->get(QNetworkRequest(QUrl(url)));
    });


    // post方式
    connect(ui->loginBtnPost, &QPushButton::clicked, [=](){
        // 1. 获取用户填写的账号和密码
        QString account = ui->accLinePost->text();
        QString passwd = ui->pwdLinePost->text();

        // 2. 使用post方式发送请求，并将账号和密码一起发送给服务器端
        // 1) 使用post方式发送给服务器端的数据格式也是 key=value&key=value&...
        QString params = QString("username=%1&password=%2").arg(account).arg(passwd);

        // 2) 设置 QNetworkRequest 对象
        QNetworkRequest request;
        request.setUrl(QUrl("http://192.168.124.54:8088/postlogin"));
        // 重设请求头（告知服务器，本次请求发送的数据格式）
        // json  -->  application/json
        // key=value&key=value&...  -->  application/x-www-form-urlencoded
        request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
        manager->post(request, params.toUtf8());
    });
}

Widget::~Widget()
{
    delete ui;
}
